package clases;

import java.util.ArrayList;


import clases.casillas.*;

public class Premio {

	private String idPremio;
	private ArrayList<Casilla> casillas;
	private float monto;
	private static int idPremioInc = 0;
	
	public Premio(String idPremio, ArrayList<Casilla> casillas, float monto) {
		this.idPremio = idPremio;
		this.casillas = casillas;
		this.monto = monto;
	}
	
	public Premio(ArrayList<Casilla> casillas, float monto) {
		this(String.valueOf(Premio.idPremioInc), casillas, monto);
		Premio.idPremioInc = Premio.idPremioInc + 1;
	}

	public boolean Gane(ArrayList<Casilla> casillasSacadas) throws Exception {
		@SuppressWarnings("unchecked")
		ArrayList<Casilla> casillasParaVer = (ArrayList<Casilla>) this.casillas.clone();
		int contadorMin = 1;
		int contadorMax = casillasSacadas.size();
		@SuppressWarnings("unchecked")
		ArrayList<Casilla> frutasSacadasTemp = (ArrayList<Casilla>) casillasSacadas.clone();
		
		while (!frutasSacadasTemp.isEmpty() && !casillasParaVer.isEmpty() && contadorMin <= contadorMax) {
			Casilla casilla = frutasSacadasTemp.get(0);
			frutasSacadasTemp.remove(0);
			contadorMin++;
			
			for (int i = 0; i <= casillasParaVer.size()-1; i++) {
				//Si la casilla coincide
				if ( !(casillasParaVer.get(i) == null) && casillasParaVer.get(i).getNombre().equals(casilla.getNombre())){
					casillasParaVer.remove(i);
					break;
				}else
				//Si la casilla tiene una casilla adentro que necesito
				if ( !(casillasParaVer.get(i) == null) && casillasParaVer.get(i).contiene(casilla)){
					//Agrego una copia de la casilla obtenida sin la casilla que necesite
					//casillasParaVer.add(((CasillaComodin)casillasParaVer.get(i)).obtenerCopiaSinCasilla(casilla));
					//Renuevo la original
					casillasParaVer.remove(i);
					break;
				}
			}
		}
		
		if(casillasParaVer.isEmpty()){ //machearon todas las casillas y las saque
		return true;
		}else{
		return false;
		}
	}
	
	public String getId() {
		return idPremio;
	}

	public float getMonto() {
		return monto;
	}
	
	public ArrayList<String> getNombresCasillas() {
	
		ArrayList<String> listaNombresCasillas = new ArrayList<String>();
			
		for (Casilla casillaTemp : this.casillas) {
			if(casillaTemp != null)
				listaNombresCasillas.add(casillaTemp.getNombre());
		}
		
		return listaNombresCasillas;
		
	}

	public ArrayList<Casilla> getCasillas() {
		return casillas;
	}

	public void setCasillas(ArrayList<Casilla> casillas) {
		this.casillas = casillas;
	}

	public static void setGlobalID(int num) {
		Premio.idPremioInc = num + 1;
		
	}
	
	

}
